// class Solution {
// public:
//     int trap(vector<int>& nums) {
//         int sz=nums.size();
//         vector<int> pre(nums.size());
//         vector<int> back(nums.size());
//         int ans=0;
//         back[sz-1]=nums[sz-1];
//         pre[0]=nums[0];
//         for(int i=1;i<sz;i++)
//         {
//             pre[i]=max(pre[i-1],nums[i]);
//         }
//         for(int i=sz-2;i>=0;i--)
//         {
//             back[i]=max(back[i+1],nums[i]);
//         }
//         for(int i=0;i<sz;i++)
//         {
//             ans+=min(pre[i],back[i])-nums[i];
//         }
//     return ans;
//     }
// };
//双指针版本
class Solution {
public:
    int trap(vector<int>& nums) {
       int left=0,sz=nums.size(),right=sz-1,leftMax=nums[0],rightMax=nums[sz-1],ans=0;
       while(left<right)
       {
            if(nums[left]<nums[right])
            {
                leftMax=nums[left]>leftMax?nums[left]:leftMax;
                ans+=leftMax-nums[left];
                left++;
            }
            else
            {
                rightMax=nums[right]>rightMax?nums[right]:rightMax;
                ans+=rightMax-nums[right];
                right--;
            }
       }
       return ans;
    }
};

